package com.note.feng.leetcode.algorithms.easy.four;

public class FourHundredEightyTwo {
    /**
     * 482 密匙格式化
     * 给定一个许可密钥字符串 s，仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 。
     *
     * 我们想要重新格式化字符串 s，使每一组包含 k 个字符，除了第一组，它可以比 k 短，但仍然必须包含至少一个字符。此外，两组之间必须插入破折号，并且应该将所有小写字母转换为大写字母。
     *
     * 返回 重新格式化的许可密钥 。
     *
     * 示例 1：
     *
     * 输入：S = "5F3Z-2e-9-w", k = 4
     * 输出："5F3Z-2E9W"
     * 解释：字符串 S 被分成了两个部分，每部分 4 个字符；
     *      注意，两个额外的破折号需要删掉。
     * 示例 2：
     *
     * 输入：S = "2-5g-3-J", k = 2
     * 输出："2-5G-3J"
     * 解释：字符串 S 被分成了 3 个部分，按照前面的规则描述，第一部分的字符可以少于给定的数量，其余部分皆为 2 个字符。
     *
     * 提示:
     *
     * 1 <= s.length <= 105
     * s 只包含字母、数字和破折号 '-'.
     * 1 <= k <= 104
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/license-key-formatting
     */
    /**
     * 解法：
     * 反向遍历字符串，遇到 - 跳过，统计非破折号字符数量，若取余 k 等于 0 ，追加破折号；
     * 注意：得到的新字符串的最后一位不能是破折号
     * 返回反转后的字符串即可
     * @param s
     * @param k
     * @return
     */
    public String licenseKeyFormatting(String s, int k) {
        int count = 0;
        StringBuffer sb = new StringBuffer();
        for (int i = s.length() - 1; i >= 0; i--) {
            if(s.charAt(i) != '-'){
                count ++;
                sb.append(Character.toUpperCase(s.charAt(i)));
                if(count % k == 0){
                    sb.append("-");
                }
            }
        }
        if(sb.length() > 0 && sb.charAt(sb.length() - 1) == '-'){
            sb.deleteCharAt(sb.length() - 1);
        }
        return sb.reverse().toString();
    }
}
